package dao;

import gerenciador.Empresa;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import conexao.ConnectionPool;

public class EmpresaDAOBD {
	private final Connection con;
	
	public EmpresaDAOBD(Connection con) {
		this.con = con;
	}
		
	private final static Map<Long, Empresa> EMPRESAS = new HashMap<>();
	static {
		try(Connection con = new ConnectionPool().getConnection()){
			String sql = "SELECT * FROM A_EMPRESAS$ ORDER BY EMPRESASID";
	        try(PreparedStatement stmt = con.prepareStatement(sql)){
	        	stmt.execute();
	        	
	        	try(ResultSet  rs  = stmt.getResultSet()){
	    		    while ( rs.next() ) {
	    		    	long    id   = rs.getLong(1);  
	    		        String  nome = rs.getString("NOME"); 
	    		       
	    		        Empresa empresa = new Empresa(nome);
	    				empresa.setId(id);
	    				
	    				EMPRESAS.put( id, empresa );
	    		    } 
	    		}        
	        }
		}catch (SQLException e1) {
			e1.printStackTrace();
		}
	}
	
	public Collection<Empresa> buscaPorSimilaridade(String nome) {
		if (nome == null)
			return EMPRESAS.values();
		
		List<Empresa> similares = new ArrayList<>();
		for (Empresa empresa : EMPRESAS.values()) {
			if (empresa.getNome().toLowerCase().contains(nome.toLowerCase()))
				similares.add(empresa);
		}
		return similares;
	}

	public void adiciona(Empresa empresa) throws SQLException {
		//** Add no Colletions... 
		geraIdEAdiciona(empresa);
		
		//** Add no banco...
		String sql = "INSERT INTO A_EMPRESAS$ (NOME) VALUES(?)";
		try(PreparedStatement stmt = con.prepareStatement( sql, new String[] {"EMPRESASID"}) ){            
			stmt.setString(1, empresa.getNome() );
			stmt.execute();
			 			
			try(ResultSet  rs  = stmt.getGeneratedKeys() ){
				if (rs.next()){
					int id = rs.getInt(1);
					empresa.setId(id);	
					System.out.println("INCLUIDO: " +  empresa );  
				}
			}
		}
	}

	private static void geraIdEAdiciona(Empresa empresa) {
		long id = EMPRESAS.size()+1l;
		empresa.setId(id);
		EMPRESAS.put(id, empresa);
	}
}
